const SAVE_KEY_PREFIX = 'chess_save_';
const AUTOSAVE_KEY = 'chess_autosave';

class GameStorage {
  // 获取存档列表
  static async getSaveList() {
    return new Promise((resolve) => {
      wx.getStorageInfo({
        success: res => resolve(res.keys.filter(k => k.startsWith(SAVE_KEY_PREFIX)))
      });
    });
  }

  // 保存游戏
  static async saveGame(name, gameState) {
    try {
      // 获取现有存档列表
      const saveList = await this.getSaveList()
      
      // 创建新的存档信息
      const saveInfo = {
        name,
        timestamp: Date.now()
      }
      
      // 检查是否存在同名存档
      const existingIndex = saveList.findIndex(save => save.name === name)
      if (existingIndex !== -1) {
        // 更新现有存档
        saveList[existingIndex] = saveInfo
      } else {
        // 添加新存档
        saveList.push(saveInfo)
      }
      
      // 保存存档列表
      await uni.setStorageSync('chess_saves_list', JSON.stringify(saveList))
      
      // 保存游戏状态
      await uni.setStorageSync(`chess_save_${name}`, JSON.stringify(gameState))
    } catch (error) {
      console.error('保存游戏失败:', error)
      throw error
    }
  }

  // 加载游戏
  static async loadGame(name) {
    try {
      const gameStateStr = await uni.getStorageSync(`chess_save_${name}`)
      if (!gameStateStr) return null
      return JSON.parse(gameStateStr)
    } catch (error) {
      console.error('加载游戏失败:', error)
      throw error
    }
  }

  // 删除存档
  static async deleteSave(name) {
    try {
      // 获取存档列表
      const saveList = await this.getSaveList()
      
      // 从列表中移除
      const newSaveList = saveList.filter(save => save.name !== name)
      
      // 更新存档列表
      await uni.setStorageSync('chess_saves_list', JSON.stringify(newSaveList))
      
      // 删除游戏状态
      await uni.removeStorageSync(`chess_save_${name}`)
    } catch (error) {
      console.error('删除存档失败:', error)
      throw error
    }
  }
}

export default GameStorage; 